import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('../images/dog2.jpg')
img2=cv2.resize(img,(300,400))#宽300，高500
cv2.imshow('img1',img2)
#添加椒盐噪声
print(img2.size)#50*60*3=9000
num_salt=0.001*img2.size #噪声密度9
print(num_salt)#9
print(img2.shape)#(60,50,3)
coords=[]
print("--产生白色椒盐的坐标--")
#遍历 ing2的形状
for i in img2.shape:#60,50,3
    # 生成 num_salt 个在 0 到 i-1 之间的随机整数
    random_ints = np.random.randint(0, i - 1, int(num_salt))  # 450
    # i: 从 60 中产生 9 个随机数
    # i: 从 50 中产生 9 个随机数
    # i: 从 3 中产生 9 个随机数 0 或者 1
    print("----i={}----".format(i))
    print(random_ints)
    # 将生成的随机整数添加到 coords 列表中
    coords.append(random_ints)
    print(coords)

    # coords = [np.random.randint(0, i - 1, int(num_salt)) for i in img2.shape]
    # print(coords)
img2[coords[0], coords[1], :] = 255  # 白噪声
print("----添加白色椒盐后的坐标值----")
print(img2[coords[0], coords[1]])
print("----产生黑色椒盐的坐标----")
coords = [np.random.randint(0, i - 1, int(num_salt)) for i in img2.shape]
print(coords)
img2[coords[0], coords[1], :] = 0  # 黑噪声
print("----添加黑色椒盐后的坐标值----")
print(img2[coords[0], coords[1]])
cv2.imshow('img2', img2)

# 高斯滤波
gauss = cv2.GaussianBlur(img2, (5, 5), 1)
# 均值滤波
dst = cv2.blur(img2, (5, 5))
# 中值滤波
median = cv2.medianBlur(img2, 5)
res1 = np.hstack((img2, gauss))

res2 = np.hstack((dst, median))
res3 = np.vstack((res1, res2))
cv2.imshow('res', res3)
cv2.waitKey(0)
cv2.destroyAllWindows()
